import java.util.Arrays;
import java.util.Scanner;

public class Test {
    //    数组nums包含从0到n的所有整数，但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗？
    public static int missingNumber(int[] nums) {
        int xor1 = 0;
        for (int i = 0; i <= nums.length; i++) {
            xor1 ^= i;
        }

        int xor2 = 0;
        for (int num:
                nums) {
            xor2 ^= num;
        }

        return xor1 ^ xor2;
    }

    public static void main1(String[] args) {
        int[] nums = {0,1,2,4,5,6,7,8};
        int ret = missingNumber(nums);
        System.out.println(ret);
    }


    //    给定一个整数数组 nums，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。

    public static void rotate(int[] nums, int k) {
        // 如果 k 大于数组长度，将 k 转换为等效的右旋转步数
        k = k % nums.length;

        // 先整体反转数组
        reverse(nums, 0, nums.length - 1);
        // 再反转前 k 个元素
        reverse(nums, 0, k - 1);
        // 最后反转剩余的元素
        reverse(nums, k, nums.length - 1);
    }

    // 反转数组的指定范围
    private static void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }

    public static void main(String[] args) {
        // 示例 1
        int[] nums1 = {1, 2, 3, 4, 5, 6, 7};
        int k1 = 3;
        rotate(nums1, k1);
        System.out.println("示例 1 输出：" + Arrays.toString(nums1)); // 期望输出: [5, 6, 7, 1, 2, 3, 4]

        // 示例 2
        int[] nums2 = {-1, -100, 3, 99};
        int k2 = 2;
        rotate(nums2, k2);
        System.out.println("示例 2 输出：" + Arrays.toString(nums2)); // 期望输出: [3, 99, -1, -100]
    }
}
